home *** CD-ROM | disk | FTP | other *** search
- import com.siemens.mp.game.Melody;
- import com.siemens.mp.game.MelodyComposer;
- import java.io.InputStream;
- import java.util.Vector;
-
- public class MelodyManager {
- static final int[] BPMs = new int[]{25, 28, 31, 35, 40, 45, 50, 56, 63, 70, 80, 90, 100, 112, 125, 140, 160, 180, 200, 225, 250, 285, 320, 355, 400, 450, 500, 565, 635, 715, 800, 900};
- private static int p_byte;
- private static int p_bit;
- private static byte[] data;
- private static int scale;
- private static Vector melodies = new Vector();
- // $FF: renamed from: mc com.siemens.mp.game.MelodyComposer
- private static MelodyComposer field_0 = new MelodyComposer();
-
- private MelodyManager() {
- }
-
- private static boolean loadData(InputStream var0, int var1) {
- try {
- data = new byte[var1];
- return var0.read(data) >= var1;
- } catch (Exception var3) {
- return false;
- }
- }
-
- public static void loadMelody(InputStream var0, int var1) {
- if (loadData(var0, var1)) {
- scale = 0;
- p_byte = 0;
- p_bit = 0;
-
- while(p_byte < data.length) {
- field_0.resetMelody();
-
- int var2;
- while((var2 = readBits(8)) != 0 && var2 != 26) {
- align8();
-
- for(int var3 = 0; var3 < var2; ++var3) {
- readCommand();
- }
- }
-
- melodies.addElement(field_0.getMelody());
- }
-
- }
- }
-
- public static void playMelody(int var0) {
- try {
- if (Runko.SoundOn) {
- ((Melody)melodies.elementAt(var0)).play();
- }
- } catch (Exception var2) {
- }
-
- }
-
- private static void align8() {
- if (p_bit != 0) {
- p_bit = 0;
- ++p_byte;
- }
-
- }
-
- private static int nextBit() {
- int var0 = data[p_byte] >> 7 - p_bit & 1;
- if (++p_bit > 7) {
- p_bit = 0;
- ++p_byte;
- }
-
- return var0;
- }
-
- private static int readBits(int var0) {
- int var1 = 0;
-
- for(int var2 = 0; var2 < var0; ++var2) {
- var1 = var1 << 1 | nextBit();
- }
-
- return var1;
- }
-
- private static void readCommand() {
- if (readBits(7) == 29 && readBits(3) == 1) {
- int var0 = readBits(4);
-
- for(int var1 = 0; var1 < var0; ++var1) {
- readBits(8);
- }
-
- int var2 = readBits(8);
-
- for(int var3 = 0; var3 < var2; ++var3) {
- int var4 = readBits(3);
- int var5 = readBits(2);
- int var6 = readBits(4);
- if (var6 > 0) {
- try {
- field_0.appendNote(64, 0);
- } catch (Exception var16) {
- }
- }
-
- int var7 = readBits(8);
- if (var7 != 0) {
- for(int var8 = 0; var8 < var7; ++var8) {
- int var9 = readBits(3);
- if (var9 == 1) {
- int var10 = readBits(4);
- int var11 = readBits(3);
- int var12 = readBits(2);
-
- try {
- if (var10 == 0) {
- field_0.appendNote(58, (var12 > 0 ? 7 : 0) + var11);
- } else {
- field_0.appendNote(12 * (scale + 1) + (var10 - 1), (var12 > 0 ? 7 : 0) + var11);
- }
- } catch (Exception var15) {
- }
- } else if (var9 == 2) {
- scale = readBits(2);
- } else if (var9 == 3) {
- readBits(2);
- } else if (var9 == 4) {
- field_0.setBPM(BPMs[readBits(5)]);
- } else if (var9 == 5) {
- readBits(4);
- }
- }
- }
-
- if (var6 > 0) {
- try {
- field_0.appendNote(67, var6);
- } catch (Exception var14) {
- }
- }
- }
- }
-
- align8();
- }
- }
-